bitkeeper revision 1.1159.209.1 (41d559d4GzyJ3WvVnHx_oB2IlXZPuw)
authorsmh22@tempest.cl.cam.ac.uk <smh22@tempest.cl.cam.ac.uk>
Fri, 31 Dec 2004 13:53:24 +0000 (13:53 +0000)
committersmh22@tempest.cl.cam.ac.uk <smh22@tempest.cl.cam.ac.uk>
Fri, 31 Dec 2004 13:53:24 +0000 (13:53 +0000)
temporary fix for BIGLOCK deadlock & tools fix

tools/libxc/xc_domain.c
xen/include/xen/sched.h

index 67168910e9f379245b789078bd6a172e9776b1e0..b29e4fc8234d6d01db43456f35aa6c4fd4a983f0 100644 (file)
@@ -69,6 +69,7 @@ int xc_domain_pincpu(int xc_handle,
     dom0_op_t op;
     op.cmd = DOM0_PINCPUDOMAIN;
     op.u.pincpudomain.domain = (domid_t)domid;
+    op.u.pincpudomain.exec_domain = 0; 
     op.u.pincpudomain.cpu  = cpu;
     return do_dom0_op(xc_handle, &op);
 }
index 355faa43c128a2a65239a0be1764d0166a127442..f837daf9fb283aeb22f0968c79188dbcda554d6b 100644 (file)
@@ -87,12 +87,18 @@ struct exec_domain
 
 };
 
-#if 01
+/*
+** SMH: do_mmu_update() grabs big_lock and subsequently can fault 
+** on map_ldt_shadow_page(), enter do_page_fault() and then deadlock 
+** trying to reacquire big_lock. A temporary fix is to make big_lock
+** recursive; overall probably needs more thought. 
+*/
+#if 0
 #define LOCK_BIGLOCK(_d) spin_lock(&(_d)->big_lock)
 #define UNLOCK_BIGLOCK(_d) spin_unlock(&(_d)->big_lock)
 #else
-#define LOCK_BIGLOCK(_d) (void)(_d)
-#define UNLOCK_BIGLOCK(_d)
+#define LOCK_BIGLOCK(_d) spin_lock_recursive(&(_d)->big_lock)
+#define UNLOCK_BIGLOCK(_d) spin_unlock_recursive(&(_d)->big_lock)
 #endif
 
 struct domain {